
point-char.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <xy_close_g_all>:
#include <stdio.h>
#include <string.h>

static void xy_close_g_all(void)
{
   0:	e92d4800 	push	{fp, lr}
   4:	e28db004 	add	fp, sp, #4
   8:	e24dd028 	sub	sp, sp, #40	; 0x28
	int i;
	char * cfgmsg[][1] = {
   c:	e59f3078 	ldr	r3, [pc, #120]	; 8c <xy_close_g_all+0x8c>
  10:	e24bc028 	sub	ip, fp, #40	; 0x28
  14:	e1a0e003 	mov	lr, r3
  18:	e8be000f 	ldm	lr!, {r0, r1, r2, r3}
  1c:	e8ac000f 	stmia	ip!, {r0, r1, r2, r3}
  20:	e89e000f 	ldm	lr, {r0, r1, r2, r3}
  24:	e88c000f 	stm	ip, {r0, r1, r2, r3}
		{"$$cfgmsg,0,5,0\r\n"},
		{"$$cfgmsg,0,6,0\r\n"},
		{"$$cfgmsg,0,7,0\r\n"},
	};

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
  28:	e3a01020 	mov	r1, #32
  2c:	e59f005c 	ldr	r0, [pc, #92]	; 90 <xy_close_g_all+0x90>
  30:	ebfffffe 	bl	0 <printf>
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8
  34:	e3a01008 	mov	r1, #8
  38:	e59f0054 	ldr	r0, [pc, #84]	; 94 <xy_close_g_all+0x94>
  3c:	ebfffffe 	bl	0 <printf>

	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
  40:	e3a03000 	mov	r3, #0
  44:	e50b3008 	str	r3, [fp, #-8]
  48:	ea00000a 	b	78 <xy_close_g_all+0x78>
		printf("xy_close_g_all = %s\n", (char *)cfgmsg[i][0]);
  4c:	e51b3008 	ldr	r3, [fp, #-8]
  50:	e1a03103 	lsl	r3, r3, #2
  54:	e24b2004 	sub	r2, fp, #4
  58:	e0823003 	add	r3, r2, r3
  5c:	e5133024 	ldr	r3, [r3, #-36]	; 0xffffffdc
  60:	e1a01003 	mov	r1, r3
  64:	e59f002c 	ldr	r0, [pc, #44]	; 98 <xy_close_g_all+0x98>
  68:	ebfffffe 	bl	0 <printf>
	};

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8

	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
  6c:	e51b3008 	ldr	r3, [fp, #-8]
  70:	e2833001 	add	r3, r3, #1
  74:	e50b3008 	str	r3, [fp, #-8]
  78:	e51b3008 	ldr	r3, [fp, #-8]
  7c:	e3530007 	cmp	r3, #7
  80:	9afffff1 	bls	4c <xy_close_g_all+0x4c>
		printf("xy_close_g_all = %s\n", (char *)cfgmsg[i][0]);
	}
}
  84:	e24bd004 	sub	sp, fp, #4
  88:	e8bd8800 	pop	{fp, pc}
  8c:	000000f8 	.word	0x000000f8
  90:	00000000 	.word	0x00000000
  94:	00000018 	.word	0x00000018
  98:	00000040 	.word	0x00000040

0000009c <xy_close_g_all_2>:

static void xy_close_g_all_2(void)
{
  9c:	e92d4800 	push	{fp, lr}
  a0:	e28db004 	add	fp, sp, #4
  a4:	e24dd028 	sub	sp, sp, #40	; 0x28
	int i;
	char * cfgmsg[][1] = {
  a8:	e59f30f0 	ldr	r3, [pc, #240]	; 1a0 <xy_close_g_all_2+0x104>
  ac:	e24bc02c 	sub	ip, fp, #44	; 0x2c
  b0:	e1a0e003 	mov	lr, r3
  b4:	e8be000f 	ldm	lr!, {r0, r1, r2, r3}
  b8:	e8ac000f 	stmia	ip!, {r0, r1, r2, r3}
  bc:	e89e000f 	ldm	lr, {r0, r1, r2, r3}
  c0:	e88c000f 	stm	ip, {r0, r1, r2, r3}
		{"$$cfgmsg,0,6,0\r\n"},
		{"$$cfgmsg,0,7,0\r\n"},
	};
	char **p;

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
  c4:	e3a01020 	mov	r1, #32
  c8:	e59f00d4 	ldr	r0, [pc, #212]	; 1a4 <xy_close_g_all_2+0x108>
  cc:	ebfffffe 	bl	0 <printf>
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8
  d0:	e3a01008 	mov	r1, #8
  d4:	e59f00cc 	ldr	r0, [pc, #204]	; 1a8 <xy_close_g_all_2+0x10c>
  d8:	ebfffffe 	bl	0 <printf>

	for (i = 0; i < 8; i++) {
  dc:	e3a03000 	mov	r3, #0
  e0:	e50b3008 	str	r3, [fp, #-8]
  e4:	ea00000a 	b	114 <xy_close_g_all_2+0x78>
		printf("xy_close_g_all_2 = %s\n", (char *)cfgmsg[i][0]);
  e8:	e51b3008 	ldr	r3, [fp, #-8]
  ec:	e1a03103 	lsl	r3, r3, #2
  f0:	e24b2004 	sub	r2, fp, #4
  f4:	e0823003 	add	r3, r2, r3
  f8:	e5133028 	ldr	r3, [r3, #-40]	; 0xffffffd8
  fc:	e1a01003 	mov	r1, r3
 100:	e59f00a4 	ldr	r0, [pc, #164]	; 1ac <xy_close_g_all_2+0x110>
 104:	ebfffffe 	bl	0 <printf>
	char **p;

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8

	for (i = 0; i < 8; i++) {
 108:	e51b3008 	ldr	r3, [fp, #-8]
 10c:	e2833001 	add	r3, r3, #1
 110:	e50b3008 	str	r3, [fp, #-8]
 114:	e51b3008 	ldr	r3, [fp, #-8]
 118:	e3530007 	cmp	r3, #7
 11c:	dafffff1 	ble	e8 <xy_close_g_all_2+0x4c>
		printf("xy_close_g_all_2 = %s\n", (char *)cfgmsg[i][0]);
	}

	p = (char **)cfgmsg;		// 去掉(char **)会告警: warning: assignment from incompatible pointer type [enabled by default]
 120:	e24b302c 	sub	r3, fp, #44	; 0x2c
 124:	e50b300c 	str	r3, [fp, #-12]
	printf("p === %s\n", *p);
 128:	e51b300c 	ldr	r3, [fp, #-12]
 12c:	e5933000 	ldr	r3, [r3]
 130:	e1a01003 	mov	r1, r3
 134:	e59f0074 	ldr	r0, [pc, #116]	; 1b0 <xy_close_g_all_2+0x114>
 138:	ebfffffe 	bl	0 <printf>
	printf("p === %s\n", *(p+1));
 13c:	e51b300c 	ldr	r3, [fp, #-12]
 140:	e2833004 	add	r3, r3, #4
 144:	e5933000 	ldr	r3, [r3]
 148:	e1a01003 	mov	r1, r3
 14c:	e59f005c 	ldr	r0, [pc, #92]	; 1b0 <xy_close_g_all_2+0x114>
 150:	ebfffffe 	bl	0 <printf>
	
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 154:	e3a03000 	mov	r3, #0
 158:	e50b3008 	str	r3, [fp, #-8]
 15c:	ea00000a 	b	18c <xy_close_g_all_2+0xf0>
		printf("repeat ---> xy_close_g_all_2 = %s\n", *(p+i));
 160:	e51b3008 	ldr	r3, [fp, #-8]
 164:	e1a03103 	lsl	r3, r3, #2
 168:	e51b200c 	ldr	r2, [fp, #-12]
 16c:	e0823003 	add	r3, r2, r3
 170:	e5933000 	ldr	r3, [r3]
 174:	e1a01003 	mov	r1, r3
 178:	e59f0034 	ldr	r0, [pc, #52]	; 1b4 <xy_close_g_all_2+0x118>
 17c:	ebfffffe 	bl	0 <printf>

	p = (char **)cfgmsg;		// 去掉(char **)会告警: warning: assignment from incompatible pointer type [enabled by default]
	printf("p === %s\n", *p);
	printf("p === %s\n", *(p+1));
	
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 180:	e51b3008 	ldr	r3, [fp, #-8]
 184:	e2833001 	add	r3, r3, #1
 188:	e50b3008 	str	r3, [fp, #-8]
 18c:	e51b3008 	ldr	r3, [fp, #-8]
 190:	e3530007 	cmp	r3, #7
 194:	9afffff1 	bls	160 <xy_close_g_all_2+0xc4>
		printf("repeat ---> xy_close_g_all_2 = %s\n", *(p+i));
	}
}
 198:	e24bd004 	sub	sp, fp, #4
 19c:	e8bd8800 	pop	{fp, pc}
 1a0:	000000f8 	.word	0x000000f8
 1a4:	00000000 	.word	0x00000000
 1a8:	00000018 	.word	0x00000018
 1ac:	00000118 	.word	0x00000118
 1b0:	00000130 	.word	0x00000130
 1b4:	0000013c 	.word	0x0000013c

000001b8 <xy_close_g_all_3>:

static void xy_close_g_all_3(void)
{
 1b8:	e92d4800 	push	{fp, lr}
 1bc:	e28db004 	add	fp, sp, #4
 1c0:	e24dd030 	sub	sp, sp, #48	; 0x30
	int i;
	char * cfgmsg[] = {
 1c4:	e59f31c0 	ldr	r3, [pc, #448]	; 38c <xy_close_g_all_3+0x1d4>
 1c8:	e24bc030 	sub	ip, fp, #48	; 0x30
 1cc:	e1a0e003 	mov	lr, r3
 1d0:	e8be000f 	ldm	lr!, {r0, r1, r2, r3}
 1d4:	e8ac000f 	stmia	ip!, {r0, r1, r2, r3}
 1d8:	e89e000f 	ldm	lr, {r0, r1, r2, r3}
 1dc:	e88c000f 	stm	ip, {r0, r1, r2, r3}
		"$$cfgmsg,0,7,0\r\n",
	};
	char **p;
	char *z;

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
 1e0:	e3a01020 	mov	r1, #32
 1e4:	e59f01a4 	ldr	r0, [pc, #420]	; 390 <xy_close_g_all_3+0x1d8>
 1e8:	ebfffffe 	bl	0 <printf>
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8
 1ec:	e3a01008 	mov	r1, #8
 1f0:	e59f019c 	ldr	r0, [pc, #412]	; 394 <xy_close_g_all_3+0x1dc>
 1f4:	ebfffffe 	bl	0 <printf>

	p = cfgmsg;		// 这里不需要(char **)
 1f8:	e24b3030 	sub	r3, fp, #48	; 0x30
 1fc:	e50b3010 	str	r3, [fp, #-16]
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 200:	e3a03000 	mov	r3, #0
 204:	e50b3008 	str	r3, [fp, #-8]
 208:	ea00000a 	b	238 <xy_close_g_all_3+0x80>
		printf("xy_close_g_all_3 = %s\n", *(p+i));
 20c:	e51b3008 	ldr	r3, [fp, #-8]
 210:	e1a03103 	lsl	r3, r3, #2
 214:	e51b2010 	ldr	r2, [fp, #-16]
 218:	e0823003 	add	r3, r2, r3
 21c:	e5933000 	ldr	r3, [r3]
 220:	e1a01003 	mov	r1, r3
 224:	e59f016c 	ldr	r0, [pc, #364]	; 398 <xy_close_g_all_3+0x1e0>
 228:	ebfffffe 	bl	0 <printf>

	printf("sizeof(cfgmsg) = %ld\n", sizeof(cfgmsg));	// 64
	printf("sizeof(cfgmsg)/sizeof(cfgmsg[0]) = %ld\n", sizeof(cfgmsg)/sizeof(cfgmsg[0]));	// 8

	p = cfgmsg;		// 这里不需要(char **)
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 22c:	e51b3008 	ldr	r3, [fp, #-8]
 230:	e2833001 	add	r3, r3, #1
 234:	e50b3008 	str	r3, [fp, #-8]
 238:	e51b3008 	ldr	r3, [fp, #-8]
 23c:	e3530007 	cmp	r3, #7
 240:	9afffff1 	bls	20c <xy_close_g_all_3+0x54>
		printf("xy_close_g_all_3 = %s\n", *(p+i));
	}

	z = *cfgmsg;
 244:	e51b3030 	ldr	r3, [fp, #-48]	; 0xffffffd0
 248:	e50b300c 	str	r3, [fp, #-12]
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 24c:	e3a03000 	mov	r3, #0
 250:	e50b3008 	str	r3, [fp, #-8]
 254:	ea000008 	b	27c <xy_close_g_all_3+0xc4>
		printf("repeat ---> xy_close_g_all_3 = %s\n", (z+i));	// 指向第一行,z+i只在第一行移动.
 258:	e51b3008 	ldr	r3, [fp, #-8]
 25c:	e51b200c 	ldr	r2, [fp, #-12]
 260:	e0823003 	add	r3, r2, r3
 264:	e1a01003 	mov	r1, r3
 268:	e59f012c 	ldr	r0, [pc, #300]	; 39c <xy_close_g_all_3+0x1e4>
 26c:	ebfffffe 	bl	0 <printf>
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
		printf("xy_close_g_all_3 = %s\n", *(p+i));
	}

	z = *cfgmsg;
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 270:	e51b3008 	ldr	r3, [fp, #-8]
 274:	e2833001 	add	r3, r3, #1
 278:	e50b3008 	str	r3, [fp, #-8]
 27c:	e51b3008 	ldr	r3, [fp, #-8]
 280:	e3530007 	cmp	r3, #7
 284:	9afffff3 	bls	258 <xy_close_g_all_3+0xa0>
		printf("repeat ---> xy_close_g_all_3 = %s\n", (z+i));	// 指向第一行,z+i只在第一行移动.
	}

	z = *cfgmsg;
 288:	e51b3030 	ldr	r3, [fp, #-48]	; 0xffffffd0
 28c:	e50b300c 	str	r3, [fp, #-12]
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 290:	e3a03000 	mov	r3, #0
 294:	e50b3008 	str	r3, [fp, #-8]
 298:	ea00000c 	b	2d0 <xy_close_g_all_3+0x118>
		printf("repeat2 ---> xy_close_g_all_3 = %s\n", z);	
 29c:	e51b100c 	ldr	r1, [fp, #-12]
 2a0:	e59f00f8 	ldr	r0, [pc, #248]	; 3a0 <xy_close_g_all_3+0x1e8>
 2a4:	ebfffffe 	bl	0 <printf>
		z = cfgmsg[i+1];
 2a8:	e51b3008 	ldr	r3, [fp, #-8]
 2ac:	e2833001 	add	r3, r3, #1
 2b0:	e1a03103 	lsl	r3, r3, #2
 2b4:	e24b2004 	sub	r2, fp, #4
 2b8:	e0823003 	add	r3, r2, r3
 2bc:	e513302c 	ldr	r3, [r3, #-44]	; 0xffffffd4
 2c0:	e50b300c 	str	r3, [fp, #-12]
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
		printf("repeat ---> xy_close_g_all_3 = %s\n", (z+i));	// 指向第一行,z+i只在第一行移动.
	}

	z = *cfgmsg;
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 2c4:	e51b3008 	ldr	r3, [fp, #-8]
 2c8:	e2833001 	add	r3, r3, #1
 2cc:	e50b3008 	str	r3, [fp, #-8]
 2d0:	e51b3008 	ldr	r3, [fp, #-8]
 2d4:	e3530007 	cmp	r3, #7
 2d8:	9affffef 	bls	29c <xy_close_g_all_3+0xe4>
		printf("repeat2 ---> xy_close_g_all_3 = %s\n", z);	
		z = cfgmsg[i+1];
	}

	z = cfgmsg[0];
 2dc:	e51b3030 	ldr	r3, [fp, #-48]	; 0xffffffd0
 2e0:	e50b300c 	str	r3, [fp, #-12]
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 2e4:	e3a03000 	mov	r3, #0
 2e8:	e50b3008 	str	r3, [fp, #-8]
 2ec:	ea00000c 	b	324 <xy_close_g_all_3+0x16c>
		printf("repeat3 ---> xy_close_g_all_3 = %s\n", z);	
 2f0:	e51b100c 	ldr	r1, [fp, #-12]
 2f4:	e59f00a8 	ldr	r0, [pc, #168]	; 3a4 <xy_close_g_all_3+0x1ec>
 2f8:	ebfffffe 	bl	0 <printf>
		z = cfgmsg[i+1];
 2fc:	e51b3008 	ldr	r3, [fp, #-8]
 300:	e2833001 	add	r3, r3, #1
 304:	e1a03103 	lsl	r3, r3, #2
 308:	e24b2004 	sub	r2, fp, #4
 30c:	e0823003 	add	r3, r2, r3
 310:	e513302c 	ldr	r3, [r3, #-44]	; 0xffffffd4
 314:	e50b300c 	str	r3, [fp, #-12]
		printf("repeat2 ---> xy_close_g_all_3 = %s\n", z);	
		z = cfgmsg[i+1];
	}

	z = cfgmsg[0];
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 318:	e51b3008 	ldr	r3, [fp, #-8]
 31c:	e2833001 	add	r3, r3, #1
 320:	e50b3008 	str	r3, [fp, #-8]
 324:	e51b3008 	ldr	r3, [fp, #-8]
 328:	e3530007 	cmp	r3, #7
 32c:	9affffef 	bls	2f0 <xy_close_g_all_3+0x138>
		printf("repeat3 ---> xy_close_g_all_3 = %s\n", z);	
		z = cfgmsg[i+1];
	}

	z = cfgmsg; // 类型不对会告警:warning: assignment from incompatible pointer type [enabled by default]
 330:	e24b3030 	sub	r3, fp, #48	; 0x30
 334:	e50b300c 	str	r3, [fp, #-12]
				// 且首行输出乱码,其它行正常
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 338:	e3a03000 	mov	r3, #0
 33c:	e50b3008 	str	r3, [fp, #-8]
 340:	ea00000c 	b	378 <xy_close_g_all_3+0x1c0>
		printf("repeat4 ---> xy_close_g_all_3 = %s\n", z);	
 344:	e51b100c 	ldr	r1, [fp, #-12]
 348:	e59f0058 	ldr	r0, [pc, #88]	; 3a8 <xy_close_g_all_3+0x1f0>
 34c:	ebfffffe 	bl	0 <printf>
		z = cfgmsg[i+1];
 350:	e51b3008 	ldr	r3, [fp, #-8]
 354:	e2833001 	add	r3, r3, #1
 358:	e1a03103 	lsl	r3, r3, #2
 35c:	e24b2004 	sub	r2, fp, #4
 360:	e0823003 	add	r3, r2, r3
 364:	e513302c 	ldr	r3, [r3, #-44]	; 0xffffffd4
 368:	e50b300c 	str	r3, [fp, #-12]
		z = cfgmsg[i+1];
	}

	z = cfgmsg; // 类型不对会告警:warning: assignment from incompatible pointer type [enabled by default]
				// 且首行输出乱码,其它行正常
	for (i = 0; i < sizeof(cfgmsg)/sizeof(cfgmsg[0]); i++) {
 36c:	e51b3008 	ldr	r3, [fp, #-8]
 370:	e2833001 	add	r3, r3, #1
 374:	e50b3008 	str	r3, [fp, #-8]
 378:	e51b3008 	ldr	r3, [fp, #-8]
 37c:	e3530007 	cmp	r3, #7
 380:	9affffef 	bls	344 <xy_close_g_all_3+0x18c>
		printf("repeat4 ---> xy_close_g_all_3 = %s\n", z);	
		z = cfgmsg[i+1];
	}

}
 384:	e24bd004 	sub	sp, fp, #4
 388:	e8bd8800 	pop	{fp, pc}
 38c:	00000208 	.word	0x00000208
 390:	00000000 	.word	0x00000000
 394:	00000018 	.word	0x00000018
 398:	00000160 	.word	0x00000160
 39c:	00000178 	.word	0x00000178
 3a0:	0000019c 	.word	0x0000019c
 3a4:	000001c0 	.word	0x000001c0
 3a8:	000001e4 	.word	0x000001e4

000003ac <test>:
 * char *p[2]  表示p是一个存储指向char类型数据的指针的数组
 *
 * char (*p)[2]  则表示*p是一个拥有两个char类型元素的数组，那么p则表示指向这个数组的指针
 */
void test()
{
 3ac:	e92d4800 	push	{fp, lr}
 3b0:	e28db004 	add	fp, sp, #4
 3b4:	e24dd008 	sub	sp, sp, #8
    char *p1[2];
    char (*p2)[2];

    printf("p1----%ld\n", sizeof(p1));	// 16
 3b8:	e3a01008 	mov	r1, #8
 3bc:	e59f0014 	ldr	r0, [pc, #20]	; 3d8 <test+0x2c>
 3c0:	ebfffffe 	bl	0 <printf>
    printf("p2----%ld\n", sizeof(p2));	// 8
 3c4:	e3a01004 	mov	r1, #4
 3c8:	e59f000c 	ldr	r0, [pc, #12]	; 3dc <test+0x30>
 3cc:	ebfffffe 	bl	0 <printf>
	 *
	 * 而p2仅仅就只是一个指针，只占有4个字节
	 *
	 * https://www.cnblogs.com/xinglichao/p/9210132.html
	 */
}
 3d0:	e24bd004 	sub	sp, fp, #4
 3d4:	e8bd8800 	pop	{fp, pc}
 3d8:	00000228 	.word	0x00000228
 3dc:	00000234 	.word	0x00000234

000003e0 <f>:
/*
 * int (*p)[4]，其实就是吧(*p)和[4]分开来理解，p所指的对象是有4个整形元素的数组，
 * 即p是指向一维数组的指针，或者说p指向的是二维数组的行，然后(*p)[0]指的是p指向的行的第0列。
 */
void f()
{
 3e0:	e92d4800 	push	{fp, lr}
 3e4:	e28db004 	add	fp, sp, #4
 3e8:	e24dd028 	sub	sp, sp, #40	; 0x28
    int a[2][3] = {{4, 9, 6},{2, 5, 7}};
 3ec:	e59f30a8 	ldr	r3, [pc, #168]	; 49c <f+0xbc>
 3f0:	e24bc028 	sub	ip, fp, #40	; 0x28
 3f4:	e1a0e003 	mov	lr, r3
 3f8:	e8be000f 	ldm	lr!, {r0, r1, r2, r3}
 3fc:	e8ac000f 	stmia	ip!, {r0, r1, r2, r3}
 400:	e89e0003 	ldm	lr, {r0, r1}
 404:	e88c0003 	stm	ip, {r0, r1}
    int (*p)[3], *q;    //p指 二维数组的行， q指 二维数组的列
    int max = a[0][0];
 408:	e51b3028 	ldr	r3, [fp, #-40]	; 0xffffffd8
 40c:	e50b3010 	str	r3, [fp, #-16]

    for (p = a; p - a < 2 ; p++) {        // p = a意思是p指向a[0]，p - a < 2，意思是有两行，计算时会变成0-0,1-0，不会超过二
 410:	e24b3028 	sub	r3, fp, #40	; 0x28
 414:	e50b3008 	str	r3, [fp, #-8]
 418:	ea000015 	b	474 <f+0x94>
        for (q = *p; q - *p < 3 ; q++) {  // *p其实是(*p)[0],即*p指向第0列,这里省略了[0],就像上面p = a，其实是把a[0]赋给p，q - *p < 3意思是三行，意思同上
 41c:	e51b3008 	ldr	r3, [fp, #-8]
 420:	e50b300c 	str	r3, [fp, #-12]
 424:	ea00000a 	b	454 <f+0x74>
            if (*q > max)
 428:	e51b300c 	ldr	r3, [fp, #-12]
 42c:	e5932000 	ldr	r2, [r3]
 430:	e51b3010 	ldr	r3, [fp, #-16]
 434:	e1520003 	cmp	r2, r3
 438:	da000002 	ble	448 <f+0x68>
                max = *q;
 43c:	e51b300c 	ldr	r3, [fp, #-12]
 440:	e5933000 	ldr	r3, [r3]
 444:	e50b3010 	str	r3, [fp, #-16]
    int a[2][3] = {{4, 9, 6},{2, 5, 7}};
    int (*p)[3], *q;    //p指 二维数组的行， q指 二维数组的列
    int max = a[0][0];

    for (p = a; p - a < 2 ; p++) {        // p = a意思是p指向a[0]，p - a < 2，意思是有两行，计算时会变成0-0,1-0，不会超过二
        for (q = *p; q - *p < 3 ; q++) {  // *p其实是(*p)[0],即*p指向第0列,这里省略了[0],就像上面p = a，其实是把a[0]赋给p，q - *p < 3意思是三行，意思同上
 448:	e51b300c 	ldr	r3, [fp, #-12]
 44c:	e2833004 	add	r3, r3, #4
 450:	e50b300c 	str	r3, [fp, #-12]
 454:	e51b200c 	ldr	r2, [fp, #-12]
 458:	e51b3008 	ldr	r3, [fp, #-8]
 45c:	e0633002 	rsb	r3, r3, r2
 460:	e353000b 	cmp	r3, #11
 464:	daffffef 	ble	428 <f+0x48>
{
    int a[2][3] = {{4, 9, 6},{2, 5, 7}};
    int (*p)[3], *q;    //p指 二维数组的行， q指 二维数组的列
    int max = a[0][0];

    for (p = a; p - a < 2 ; p++) {        // p = a意思是p指向a[0]，p - a < 2，意思是有两行，计算时会变成0-0,1-0，不会超过二
 468:	e51b3008 	ldr	r3, [fp, #-8]
 46c:	e283300c 	add	r3, r3, #12
 470:	e50b3008 	str	r3, [fp, #-8]
 474:	e51b2008 	ldr	r2, [fp, #-8]
 478:	e24b3028 	sub	r3, fp, #40	; 0x28
 47c:	e0633002 	rsb	r3, r3, r2
 480:	e3530017 	cmp	r3, #23
 484:	daffffe4 	ble	41c <f+0x3c>
        for (q = *p; q - *p < 3 ; q++) {  // *p其实是(*p)[0],即*p指向第0列,这里省略了[0],就像上面p = a，其实是把a[0]赋给p，q - *p < 3意思是三行，意思同上
            if (*q > max)
                max = *q;
        }
    }
    printf("Max: %d\n", max);
 488:	e51b1010 	ldr	r1, [fp, #-16]
 48c:	e59f000c 	ldr	r0, [pc, #12]	; 4a0 <f+0xc0>
 490:	ebfffffe 	bl	0 <printf>
}
 494:	e24bd004 	sub	sp, fp, #4
 498:	e8bd8800 	pop	{fp, pc}
 49c:	0000024c 	.word	0x0000024c
 4a0:	00000240 	.word	0x00000240

000004a4 <main>:

void main()
{
 4a4:	e92d4800 	push	{fp, lr}
 4a8:	e28db004 	add	fp, sp, #4
 4ac:	e24dd008 	sub	sp, sp, #8
    char *ch = "init....";
 4b0:	e59f30b0 	ldr	r3, [pc, #176]	; 568 <main+0xc4>
 4b4:	e50b3008 	str	r3, [fp, #-8]
    printf("string = %s, len = %ld\n", ch, sizeof(ch)); // 8
 4b8:	e3a02004 	mov	r2, #4
 4bc:	e51b1008 	ldr	r1, [fp, #-8]
 4c0:	e59f00a4 	ldr	r0, [pc, #164]	; 56c <main+0xc8>
 4c4:	ebfffffe 	bl	0 <printf>
    printf("string = %s, len = %ld\n", ch, strlen(ch)); // 8
 4c8:	e51b0008 	ldr	r0, [fp, #-8]
 4cc:	ebfffffe 	bl	0 <strlen>
 4d0:	e1a03000 	mov	r3, r0
 4d4:	e1a02003 	mov	r2, r3
 4d8:	e51b1008 	ldr	r1, [fp, #-8]
 4dc:	e59f0088 	ldr	r0, [pc, #136]	; 56c <main+0xc8>
 4e0:	ebfffffe 	bl	0 <printf>

    ch = "connected";
 4e4:	e59f3084 	ldr	r3, [pc, #132]	; 570 <main+0xcc>
 4e8:	e50b3008 	str	r3, [fp, #-8]
    printf("string = %s, len = %ld\n", ch, sizeof(ch)); // 8
 4ec:	e3a02004 	mov	r2, #4
 4f0:	e51b1008 	ldr	r1, [fp, #-8]
 4f4:	e59f0070 	ldr	r0, [pc, #112]	; 56c <main+0xc8>
 4f8:	ebfffffe 	bl	0 <printf>
    printf("string = %s, len = %ld\n", ch, strlen(ch)); // 9
 4fc:	e51b0008 	ldr	r0, [fp, #-8]
 500:	ebfffffe 	bl	0 <strlen>
 504:	e1a03000 	mov	r3, r0
 508:	e1a02003 	mov	r2, r3
 50c:	e51b1008 	ldr	r1, [fp, #-8]
 510:	e59f0054 	ldr	r0, [pc, #84]	; 56c <main+0xc8>
 514:	ebfffffe 	bl	0 <printf>

    ch = "finish...\n";
 518:	e59f3054 	ldr	r3, [pc, #84]	; 574 <main+0xd0>
 51c:	e50b3008 	str	r3, [fp, #-8]
    printf("string = %s, len = %ld\n", ch, sizeof(ch)); // 8
 520:	e3a02004 	mov	r2, #4
 524:	e51b1008 	ldr	r1, [fp, #-8]
 528:	e59f003c 	ldr	r0, [pc, #60]	; 56c <main+0xc8>
 52c:	ebfffffe 	bl	0 <printf>
    printf("string = %s, len = %ld\n", ch, strlen(ch)); // 9
 530:	e51b0008 	ldr	r0, [fp, #-8]
 534:	ebfffffe 	bl	0 <strlen>
 538:	e1a03000 	mov	r3, r0
 53c:	e1a02003 	mov	r2, r3
 540:	e51b1008 	ldr	r1, [fp, #-8]
 544:	e59f0020 	ldr	r0, [pc, #32]	; 56c <main+0xc8>
 548:	ebfffffe 	bl	0 <printf>

	xy_close_g_all();
 54c:	ebfffeab 	bl	0 <xy_close_g_all>
	xy_close_g_all_2();
 550:	ebfffed1 	bl	9c <xy_close_g_all_2>
	xy_close_g_all_3();
 554:	ebffff17 	bl	1b8 <xy_close_g_all_3>

    f();
 558:	ebfffffe 	bl	3e0 <f>

	test();
 55c:	ebfffffe 	bl	3ac <test>
}
 560:	e24bd004 	sub	sp, fp, #4
 564:	e8bd8800 	pop	{fp, pc}
 568:	00000264 	.word	0x00000264
 56c:	00000270 	.word	0x00000270
 570:	00000288 	.word	0x00000288
 574:	00000294 	.word	0x00000294
